package com.vilen.learn.java7;

import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;

/**
 * Created by vilen on 2017/9/20.
 */
public class Listing_2_3 {
    public static void main(String[] args) throws IOException {
        /**
         * 在单个目录中查找文件,最前面是我们已经熟悉的Paths.get(String)调用①。
         * 紧随其后的是关键方法DirectoryStream(Path directory, String patternMatch)②，
         * 它返回一个经过过滤的DirectoryStream，其中包含以.properties结尾的文件。最后输出每个子项③。
            过滤流中用到的模式匹配称为glob模式匹配
         */
        Path dir = Paths.get("E:\\my_data\\IdeaProject\\test\\Java7\\src\\main\\resources");
        // 声明过滤流
        try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir,"*.txt")){
            for (Path entry : stream) {
                System.out.println(entry.getFileName());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        /**
         * 列出子目录下的所有java源码文件
         * 调用Files.walkFileTree方法开始①。
         * 这里的关键是FindJavaVisitor，该类扩展了FileVisitor的默认实现类SimpleFileVisitor②。
         * 你想让SimpleFileVisitor来完成大部分工作，比如遍历目录。
         * 可实际上你唯一要做的就是重写visitFile(Path,BasicFileAttributes)1方法③，
         * 在这个方法中你也只需要写些代码来判断文件名是否以.java结尾，如果确实是，就在stdout中输出。
         */
        Path startingDir = Paths.get("E:\\my_data\\IdeaProject\\test\\Java7");
        Files.walkFileTree(startingDir,new FindJavaVisitor());
    }

    private static class FindJavaVisitor extends SimpleFileVisitor<Path> {
        @Override
        public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
            if (file.toString().endsWith(".java")) {
                System.out.println(file.getFileName());
            }
            return FileVisitResult.CONTINUE;
        }
    }
}
